package handler

import (
	"github.com/gin-gonic/gin"
	"path/filepath"
	"zg3yk/dao"
	"zg3yk/request"
)

func List(c *gin.Context) {
	result, _ := dao.List()
	c.JSON(200, gin.H{
		"code": 200,
		"msg":  "ok",
		"data": result,
	})
}
func Upload(c *gin.Context) {
	file, err := c.FormFile("file")
	if err != nil {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  err.Error(),
			"data": nil,
		})
		return
	}
	// c.JSON(200, gin.H{"message": file.Header.Context})

	ext := filepath.Ext(file.Filename)

	if ext != ".jpg" && ext != ".mp4" && ext != "txt" {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  "文件类型上传错误",
			"data": nil,
		})
		return
	}
	filename := "C:\\Users\\Helen\\GoWork\\2209A\\专高三\\月考\\zg3yk\\img\\" + file.Filename
	err = c.SaveUploadedFile(file, filename)
	if err != nil {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  "上传失败",
			"data": nil,
		})
		return
	}

	c.JSON(200, gin.H{
		"code": 0,
		"msg":  "成功",
		"data": nil,
	})
}
func ListArticle(c *gin.Context) {
	article, err := dao.ListArticle()
	if err != nil {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  err.Error(),
			"data": nil,
		})
		return
	}
	c.JSON(200, gin.H{
		"code": 0,
		"msg":  "成功",
		"data": article,
	})
}

func AddArticle(c *gin.Context) {
	var req request.AddArticle
	if err := c.ShouldBind(&req); err != nil {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  err.Error(),
			"data": nil,
		})
		return
	}
	userId := c.GetUint("userId")
	err := dao.AddArticle(req.Title, req.Context, int(userId))
	if err != nil {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  err.Error(),
			"data": nil,
		})
		return
	}
	c.JSON(200, gin.H{
		"code": 0,
		"msg":  "成功",
		"data": nil,
	})

}

func GetArticle(c *gin.Context) {
	userId := c.GetUint("userId")
	article, err := dao.GetArticle(int(userId))
	if err != nil {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  err.Error(),
			"data": nil,
		})
		return
	}
	c.JSON(200, gin.H{
		"code": 0,
		"msg":  "成功",
		"data": article,
	})
}

func AddArticleLike(c *gin.Context) {
	var req request.ArticleLike
	if err := c.ShouldBind(&req); err != nil {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  err.Error(),
			"data": nil,
		})
		return
	}
	userId := c.GetUint("userId")
	err := dao.AddArticleLike(req.Button, req.ArticleId, int(userId))
	if err != nil {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  err.Error(),
			"data": nil,
		})
		return
	}
	c.JSON(200, gin.H{
		"code": 0,
		"msg":  "成功",
		"data": nil,
	})
}

func AddContextLike(c *gin.Context) {
	var req request.ContextLike
	if err := c.ShouldBind(&req); err != nil {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  err.Error(),
			"data": nil,
		})
		return
	}
	userId := c.GetUint("userId")
	err := dao.AddContextLike(req.Button, req.ContextId, int(userId))
	if err != nil {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  err.Error(),
			"data": nil,
		})
		return
	}
	c.JSON(200, gin.H{
		"code": 0,
		"msg":  "成功",
		"data": nil,
	})
}

func AddContext(c *gin.Context) {
	var req request.AddContext
	if err := c.ShouldBind(&req); err != nil {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  err.Error(),
			"data": nil,
		})
		return
	}
	userId := c.GetUint("userId")
	if len(req.Context) >= 100 {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  "评论内容过长",
			"data": nil,
		})
		return
	}
	err := dao.AddContext(req.Button, req.Context, int(userId), req.ArticleId)
	if err != nil {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  err.Error(),
			"data": nil,
		})
		return
	}
	c.JSON(200, gin.H{
		"code": 0,
		"msg":  "成功",
		"data": nil,
	})
}

func AddContexts(c *gin.Context) {
	var req request.AddContext
	if err := c.ShouldBind(&req); err != nil {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  err.Error(),
			"data": nil,
		})
		return
	}
	userId := c.GetUint("userId")
	if len(req.Context) >= 100 {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  "评论内容过长",
			"data": nil,
		})
		return
	}
	err := dao.AddContexts(req.Context, int(userId), req.FatherId, req.ArticleId, req.Button)
	if err != nil {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  err.Error(),
			"data": nil,
		})
		return
	}
	c.JSON(200, gin.H{
		"code": 0,
		"msg":  "成功",
		"data": nil,
	})
}

func LikeArticleCount(c *gin.Context) {
	userId := c.GetUint("userId")
	result, err := dao.GetArticleLike(int(userId))
	if err != nil {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  err.Error(),
			"data": nil,
		})
		return
	}
	c.JSON(200, gin.H{
		"code": 0,
		"msg":  "成功",
		"data": result,
	})
}

func LikeContextCount(c *gin.Context) {
	userId := c.GetUint("userId")
	like, err := dao.GetContextLike(int(userId))

	if err != nil {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  err.Error(),
			"data": nil,
		})
		return
	}
	c.JSON(200, gin.H{
		"code": 0,
		"msg":  "成功",
		"data": like,
	})
}
